package com.tianyi.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//刘德华的经纪人
//实现一个InvocationHandler接口
public class JingJiRen implements InvocationHandler {

	//代理模式的第3个条件是代理人需要持有被代理人的引用
	private Person target;
	
	//获取被代理人的引用，也就是个人资料
	public Object getInstance(Person target){
		this.target=target;
		//得到被代理人的字节码文件
		Class clazz=target.getClass();
		System.out.println("被代理对象的Class是:"+clazz);
		//下面的方法执行之后，会生成一个新的代理类对象
		return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
	}
	
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

		//把经纪人所要做的事情添加到被代理人要做的事情前后
		System.out.println("jdk方式实现动态代理,被代理对象必须实现一个接口");
		System.out.println("我是刘德华的经纪人，刘天王需要开一场演唱会");
		System.out.println("时间定于6月1号儿童节，地点是南京奥体中心");
		System.out.println("需要买票的可以联系我");
		System.out.println("----------");
		
		//被代理人的指定方法执行，没有对被代理人的代码进行改动
		method.invoke(this.target, args);
		
		System.out.println("----------");
		System.out.println("演唱会结束，需要刘德华签名照的可以联系我");
		System.out.println("刘德华说感谢所有粉丝的支持，大家辛苦了");
		
		return null;
	}

}
